package com.awccis.driver.service;

import com.awccis.admin.model.pay.PaySimpleInfoBean;
import com.awccis.customer.model.order.OrderBean;
import com.awccis.driver.model.*;
import com.awccis.driver.model.car.CarInfo;
import com.awccis.driver.model.credit.CreditBean;
import com.awccis.driver.model.location.LocationBean;
import com.awccis.driver.model.order.HistoryOrderBean;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @Author: 纯牛奶丶
 * @Date: 2018-03-30 0030 上午 11:02
 * @Since: REDMI.txt.0
 * @Decription: driver司机端数据交互接口
 **/

public interface DriverService {
    
    /**
     * 判断登录名是否存在
     *
     * @param nickName 登录名
     * @return true or false true表示存在可以登录 false 不存在
     */
    boolean selectLoginNameExists(int nickName);
    
    /**
     * 验证登录信息接口
     *
     * @param driverLoginInfo driverLoginInfo 司机登陆信息
     * @return true or false
     */
    DriverInfo checkDriverInfo(DriverLoginInfo driverLoginInfo);

    /**
     * 根据司机id获取手机号
     * @param nickName nickName
     * @return driverPhone
     */
    String getDriverPhoneByNickName(int nickName);
    /**
     * 注册用户信息接口
     *
     * @param driverInfo driverInfo 司机注册信息
     * @return 执行结果结果数
     */
    int insertDriverInfo(DriverInfo driverInfo);
    
//    /**
//     * 判断是否已经登陆
//     *
//     * @param nickName nickName
//     * @return int 登陆状态值 0 或 1
//     */
//    boolean selectLoginStatus(int nickName);
    
    /**
     * 获取上一个nickName
     *
     * @return int 上一个nickName
     */
    int getLastNickName();
    
    /**
     * 注册汽车信息接口
     *
     * @param carInfo carInfo 汽车信息
     * @return boolean true or false
     */
    boolean insertCarInfoAndLocation(CarInfo carInfo);
    
    /**
     * 更改冻结状态
     *
     * @param statusBean statusBean
     * @return boolean true or false
     */
    boolean updateStatus(StatusBean statusBean);
    
    /**
     * 更改审核状态
     *
     * @param statusBean statusBean
     * @return boolean true or false
     */
    boolean updateIsChecked(StatusBean statusBean);
    
//    /**
//     * 更改在线状态
//     *
//     * @param statusBean statusBean
//     * @return boolean true or false
//     */
//    boolean updateIsOnlineStatus(StatusBean statusBean);
    
//    /**
//     * 更改运营状态
//     *
//     * @param statusBean statusBean
//     * @return boolean true or false
//     */
//    boolean updateIsWorkStatus(StatusBean statusBean);
    
    /**
     * 更改信用积分
     *
     * @param statusBean statusBean
     * @return boolean true or false
     */
    boolean updateIntegralCount(StatusBean statusBean);

    /**
     * 添加司机的详情积分
     * @param creditBean creditBean
     * @return true or false
     */
    boolean insertDriverCredit(CreditBean creditBean);
    
    /**
     * 查询信用积分
     *
     * @param statusBean statusBean
     * @return 信用积分
     */
    Integer selectIntegralCount(StatusBean statusBean);

    /**
     * 根据driverID 查询星级
     * @param driverId driverID
     * @return 星
     */
    Integer selectStarLevel(Integer driverId);
    
    /**
     * 查询司机当前订单
     *
     * @param driverInfo driverInfo 司机信息
     * @return 订单信息
     */
    OrderBean selectCurrentOrder(DriverInfo driverInfo);
    
    /**
     * 查询司机的个人信息
     *
     * @param driverLoginInfo 传入的值为司机的nickName
     * @return 返回的是司机的driverInfo
     */
    DriverInfo selectDriverInfo(DriverLoginInfo driverLoginInfo);


    
    /**
     * 更改订单的不同状态和时间
     *
     * @param orderBean 传入的是时间和订单
     * @return 返回更改结果
     */
    boolean updateDifferOrderTime(OrderBean orderBean);
    
    /**
     * 查询历史订单总数
     * @param hashMap hashMap
     * @return 历史订单总数
     */
    Integer selectDriverOrderCount(HashMap hashMap);
    
    /**
     * 查询历史订单
     *
     * @param hashMap 司机信息
     * @return 历史订单列表
     */
    List<HistoryOrderBean> selectHistoryOrders(HashMap<String, Object> hashMap);
    
//    /**
//     * 更改司机的位置信息
//     * @param locationBean
//     * @return
//     */
//    boolean updateDriverLocation(LocationBean locationBean);

    /**
     * 查询司机的简单信息
     * @param hashMap driverId
     * @return hashMap
     */
    HashMap selectSimpleDriverInfo(HashMap hashMap);
    
    /**
     * 记录访问信息
     * @param map 1
     */
    void recordVisitInfo(Map<String, Object> map);

    /**
     * 通过driverId更改司机的详细信息
     * @param driverUpdateInfo driverUpdateInfo
     * @return 更改结果
     */
    Boolean updateDriverDetailInfoById(DriverUpdateInfo driverUpdateInfo);

    /**
     * 通过driverId获取未完成订单信息
     * @param driverId driverid
     * @return List
     */
    List<NoFinishOrder> getNoFinishOrders(int driverId);

    /**
     * 司机获取自己本周需要缴费金额
     * @param paySimpleInfoBean driverId payWeek
     * @return paySimpleInfoBean
     */
    PaySimpleInfoBean getNeedPayInfo(PaySimpleInfoBean paySimpleInfoBean);

    /**
     * 司机确认自己交费
     * @param paySimpleInfoBean paySimpleInfoBean
     * @return 更改结果
     */
    Boolean setNeedPay(PaySimpleInfoBean paySimpleInfoBean);

    /**
     * 查询缴费记录
     * @param driverId driverId
     * @return List<PayRecord>
     */
    List<PayRecord> getPayRecord(int driverId);
}
